package marseillaisdu90.modele;

import java.util.ArrayList;


/**
 * Une "Pièce" représente un des lieux dans lesquels se déroule l'action du jeu.
 * Une "Pièce" peut etre un couloir, une salle...
 * Elle possède une liste de personnages et une liste d'objets
 * @author guillaume et yoann
 *
 */
public class Piece {
	
	protected int numero;

	//1case = 32*32px
	protected int nb_caseX=25; //800px
	protected int nb_caseY=20; //640 px 
	
	protected String nom;
	protected String description;
	
	public int[][] topographie= new int[nb_caseX][nb_caseY];
	
	public ArrayList<Objet> ListeObj=new ArrayList<Objet>();
	public ArrayList<Personnage> ListePersonnage=new ArrayList<Personnage>();
	public ArrayList<Sortie> ListeSortie=new ArrayList<Sortie>();
	
	//Chemin des images et musique dans l'arboresence
	protected String path_bg;
	private int path_music;
	protected int image;
	
	//TODO
	//protected JouerSon musique;
	static boolean SonEstActiver;
	
	protected boolean ouverte;
	
	/**
	 * On initialise les caractéristique de la Piece
	 * @param chx_numero numero de la piece
	 * @param chx_nom nom de la piece
	 * @param chx_description description de la piece
	 * @param chx_topographie topographie de la piece
	 * @param chx_image chemin de l'image de la piece
	 * @param chx_musique musique jouée dans la piece
	 * @param chx_ouverte si la piece est ouverte
	 */
	public Piece(int chx_numero,String chx_nom, String chx_description, int[][] chx_topographie, int chx_image, int chx_musique, boolean chx_ouverte) {
		
		numero=chx_numero;
		nom=chx_nom;
		description=chx_description;
		topographie=chx_topographie;
		ouverte=chx_ouverte;
		path_bg="img/bg/";
		image=chx_image;
		path_music=chx_musique;
		//TODO
		//musique=new JouerSon(path_music+chx_musique);
		SonEstActiver=true;
	}
	
	/**
	 * Pour activer le son de la piece
	 */
	public void PieceSonOn(){
		//TODO
		//musique.lecture();
	
	}
	
	/**
	 * Pour désactiver le son de la piece
	 */
	public void PieceSonOff(){
		//TODO
		//musique.stop();
	
	}
	
	/**
	 * Pour fermer le son de la piece
	 */
	public void PieceSonFermer(){
		//TODO
		//musique.fermer();
	
	}
	
	/**
	 * Pour ajouter un objet dans la pièce
	 * @param objet Objet voulu
	 */
	public void ajouterObjet(Objet objet) {
		
		ListeObj.add(objet);
		
	}
	
	/**
	 * Pour supprimer un objet dans la pièce
	 * @param nom_obj nom de l'objet voulu
	 */
	public void supprimerObjet(String nom_obj) {
		
		int index_courant=0;
		int index=0;
		boolean possible=false;
			for(Objet o: ListeObj) {
				if(o.getNomObj()==nom_obj)
					index_courant=index;
					possible=true;
				index++;
			}
		if(possible==true)
			ListeObj.remove(index_courant);
		
	}
	
	/**
	 * Pour ajouter un personnage dans la pièce
	 * @param perso personnage voulu
	 */
	public void ajouterPerso(Personnage perso) {
		
		ListePersonnage.add(perso);
		
	}
	
	/**
	 * Pour supprimer un personnage dans la pièce
	 * @param nom_perso nom du personnage voulu
	 */
	public void supprimerPerso(String nom_perso) {
		
		int index_courant=0;
		int index=0;
		boolean possible=false;
			for(Personnage p: ListePersonnage) {
				if(p.getNom()==nom_perso)
					index_courant=index;
					possible=true;
				index++;
			}
		if(possible==true)
			ListePersonnage.remove(index_courant);
		
	}
	
	/**
	 * Pour ajouter une sortie dans la pièce
	 * @param sortie sortie voulu
	 */
	public void ajouterSortie(Sortie sortie) {
		
		ListeSortie.add(sortie);
		
	}
	
	/**
	 * Pour supprimer une sortie dans la pièce
	 * @param numSortie numéro de la sortie voulue
	 */
	public void supprimerSortie(int numSortie) {
		
		int index_courant=0;
		int index=0;
		boolean possible=false;
			for(Sortie s: ListeSortie) {
				if(s.getNum()==numSortie)
					index_courant=index;
					possible=true;
				index++;
			}
		if(possible==true)
			ListePersonnage.remove(index_courant);
	}
	
	// Getteur pour la liste d'objet
	
	/**
	 * Obtenir la liste d'objets
	 */
	public ArrayList<Objet> getlo() {
		return ListeObj;	
	}
	
	
	/*	*	*	*	*	*	*	*	*	*	*	*	*	*	*	*
	 * Getteur pour l'ensemble des attributs de la classe Piece *
	 *	*	*	*	*	*	*	*	*	*	*	*	*	*	*	*/
	/**
	 * Obtenir le numéro de la pièce
	 * @return numéro de la pièce
	 */
	public int getNumPiece(){
		return numero;	
	}
	
	/**
	 * Obtenir le nom de la pièce
	 * @return nom de la pièce
	 */
	public String getNomPiece(){
		return nom;
	}
	
	/**
	 * Obtenir la description de la pièce
	 * @return description de la pièce
	 */
	public String getDescriPiece() {
		return description;
	}
	
	/**
	 * Obtenir la topographie de la pièce
	 * @return topographie de la pièce
	 */
	public int[][] getTopoPiece() {
		return topographie;
	}
	
	/**
	 * Obtenir le chemin de l'image de la pièce
	 * @return chemin de l'image de la pièce
	 */
	public int getChx_ImagePiece() {
		return image;
	}
	
	/**
	 * Obtenir le Son de la pièce
	 * @return Son de la pièce
	 */
	//TODO
	/*
	public JouerSon getChx_SonPiece() {
		return musique;
	}
	*/
	/**
	 * Savoir si la pièce est ouverte
	 * @return true si la pièce est ouverte
	 */
	public boolean getOuverte() {
		return ouverte;
	}
	
	public int getPath_music() {
		return path_music;
	}

	public void setPath_music(int path_music) {
		this.path_music = path_music;
	}
	
}
